home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Graphics Programming (2nd Edition) / Visual Basic Graphics Programming 2nd Edition.iso / OldSrc / CH10 / SRC / OBJPICTA.CLS < prev    next >
Text File  |  1996-05-04  |  3KB  |  133 lines

  1. VERSION 1.0 CLASS
  2. BEGIN
  3.   MultiUse = -1  'True
  4. END
  5. Attribute VB_Name = "ObjPicture"
  6. Attribute VB_Creatable = False
  7. Attribute VB_Exposed = False
  8. Option Explicit
  9.  
  10. Public objects As New Collection
  11.  
  12. Const TYPE_STRING = "3D APF PICTURE"
  13.  
  14.  
  15. ' ************************************************
  16. ' Find an object that contains this point.
  17. ' ************************************************
  18. Function NearestObject(x As Single, y As Single) As Object
  19. Dim obj As Object
  20.        
  21.     ' Find the object.
  22.     For Each obj In objects
  23.         If obj.Contains(x, y) Then
  24.             Set NearestObject = obj
  25.             Exit Function
  26.         End If
  27.     Next obj
  28.     Set NearestObject = Nothing
  29. End Function
  30.  
  31.  
  32. Function ObjectType() As String
  33.     ObjectType = TYPE_STRING
  34. End Function
  35.  
  36.  
  37.  
  38. ' ************************************************
  39. ' Read the picture from a file using Input.
  40. ' Assume TYPE_STRING has already been read.
  41. ' ************************************************
  42. Sub FileInput(filenum As Integer)
  43. Dim num As Integer
  44. Dim i As Integer
  45. Dim obj As Object
  46. Dim obj_type As String
  47.  
  48.     ' Read the number of objects in the file.
  49.     Input #filenum, num
  50.     
  51.     ' Repeatedly read objects from the file.
  52.     For i = 1 To num
  53.         Input #filenum, obj_type
  54.         Select Case obj_type
  55.             Case TYPE_STRING
  56.                 Set obj = New ObjPicture
  57.             Case "POLYLINE"
  58.                 Set obj = New ObjPolyline
  59.             Case "ROTATED"
  60.                 Set obj = New ObjRotated
  61.             Case Else
  62.                 Beep
  63.                 MsgBox "Unknown object type """ & obj_type & """.", , vbExclamation
  64.                 Exit Sub
  65.         End Select
  66.         obj.FileInput filenum
  67.         objects.Add obj
  68.     Next i
  69. End Sub
  70.  
  71. ' ************************************************
  72. ' Draw the picture on a Form, Printer, or
  73. ' PictureBox.
  74. ' ************************************************
  75. Sub Draw(canvas As Object, Optional r As Variant)
  76. Dim obj As Object
  77.  
  78.     For Each obj In objects
  79.         obj.Draw canvas, r
  80.     Next obj
  81. End Sub
  82.  
  83. ' ************************************************
  84. ' Write the picture to a file using Write.
  85. ' Begin with TYPE_STRING to identify this object.
  86. ' ************************************************
  87. Sub FileWrite(filenum As Integer)
  88. Dim obj As Object
  89.  
  90.     Write #filenum, TYPE_STRING
  91.     Write #filenum, objects.Count
  92.     
  93.     For Each obj In objects
  94.         obj.FileWrite filenum
  95.     Next obj
  96. End Sub
  97.  
  98. ' ************************************************
  99. ' Apply a nonlinear transformation to the objects.
  100. ' ************************************************
  101. Sub Distort(trans As Object)
  102. Dim obj As Object
  103.  
  104.     For Each obj In objects
  105.         obj.Distort trans
  106.     Next obj
  107. End Sub
  108.  
  109.  
  110. ' ************************************************
  111. ' Apply a transformation matrix which may not
  112. ' contain 0, 0, 0, 1 in the last column to the
  113. ' objects.
  114. ' ************************************************
  115. Sub ApplyFull(M() As Single)
  116. Dim obj As Object
  117.  
  118.     For Each obj In objects
  119.         obj.ApplyFull M
  120.     Next obj
  121. End Sub
  122. ' ************************************************
  123. ' Apply a transformation matrix to the objects.
  124. ' ************************************************
  125. Sub Apply(M() As Single)
  126. Dim obj As Object
  127.  
  128.     For Each obj In objects
  129.         obj.Apply M
  130.     Next obj
  131. End Sub
  132.  
  133.